package main

import "fmt"

func main() {
	/*
		// 声明channel（仅定义类型，未初始化，此时为nil）
		var ch1 chan int    // 声明一个int类型的channel，只能收发int数据
		var ch2 chan string // 声明一个string类型的channel
		var ch3 chan []int  // 声明一个[]int类型的channel
	*/

	// 初始化channel（必须通过make创建后才能使用）
	chInt := make(chan int)       // 创建无缓冲int channel（同步）
	chStr := make(chan string, 8) // 创建有缓冲string channel（容量8）
	chBool := make(chan bool)     // 创建无缓冲bool channel

	// 向channel发送数据（使用 <- 操作符）
	go func() {
		chInt <- 10     // 发送整数10到chInt
		chBool <- false // 发送布尔值到chBool
	}()

	chStr <- "hello" // 发送字符串到chStr --> 设置了缓冲容量的通道可以直接接收值

	// 从channel接收数据（同样使用 <- 操作符）
	number := <-chInt // 从chInt接收数据并赋值给number
	say := <-chStr    // 从chStr接收数据
	flag := <-chBool  // 从chBool接收数据

	// 关闭channel（不再发送数据时关闭，通常由发送方关闭）
	close(chInt)  // 关闭chInt（关闭后不能再发送）
	close(chStr)  // 关闭chStr
	close(chBool) // 关闭chBool

	fmt.Println("接收到的数据：", number, say, flag)
}
